import java.util.LinkedList;
import java.util.Scanner;

public class test2 {
    /**
     * 两数相加：
     * 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
     * 请你将两个数相加，并以相同形式返回一个表示和的链表。
     * 你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
     *
     * 示例：
     * 输入：l1 = [2,4,3], l2 = [5,6,4]
     * 输出：[7,0,8]
     * 解释：342 + 465 = 807.
     */

    public static void main(String[] args) {
        LinkedList<Integer> linkedList1 = new LinkedList<Integer>();
        LinkedList<Integer> linkedList2 = new LinkedList<Integer>();
        addLinkedList(linkedList1);
        addLinkedList(linkedList2);
        LinkedList<Integer> ret = addTwoNumbers(linkedList1,linkedList2);
        System.out.println(ret);
    }

    public static void addLinkedList(LinkedList<Integer> linkedList) {
        Scanner scanner = new Scanner(System.in);
        int num = 0;
        System.out.println("请输入你要添加的值：");
        while (true) {
            num = scanner.nextInt();
            if (num == -1) {
                return;
            }
            linkedList.add(num);
        }
    }

    public static LinkedList<Integer> addTwoNumbers(LinkedList<Integer> l1, LinkedList<Integer> l2) {
        LinkedList<Integer> retLinkedList = new LinkedList<Integer>();
        Integer[] array1 = l1.<Integer>toArray(new Integer[]{});//调用泛型方法
        Integer[] array2 = l2.<Integer>toArray(new Integer[]{});
        int maxLen = array1.length > array2.length ? array1.length : array2.length;
        int minLen = array1.length < array2.length ? array1.length : array2.length;
        Integer[] retArray = new Integer[maxLen];
        int i = 0;
        int t = 0;
        for (i = 0; i < minLen; i++) {
            if (array1[i] + array2[i] + t >= 10) {
                retArray[i] = (array1[i] + array2[i]) % 10 + t;
                t = (array1[i] + array2[i]) / 10;

            } else {
                retArray[i] = array1[i] + array2[i] + t;
                t = 0;
            }
        }
        if (array1.length > minLen) {
            while (i < maxLen) {
                retArray[i] = array1[i];
            }
        } else if (array2.length > minLen) {
            while (i < maxLen) {
                retArray[i] = array2[i];
            }
        }

        for (int j = 0; j < maxLen; j++) {
            retLinkedList.add(retArray[j]);
        }
        return retLinkedList;
    }
}
